package priorityqueue;
import java.util.Vector;
public class PriorityQueue {
Vector<Integer> heap = new Vector();
public void insert(Vector<Integer> v)
{
for ( int i = 0 ; i < v.size() ; i ++ )
{
heap.add(v.get(i)) ;
}
for ( int i = heap.size()-v.size() ; i < heap.size() ; i ++ )
{
for( int j = i ; j > 0 ; j /= 2 )
{
int k ;
if ( j % 2 == 0 )
{
k = j / 2 - 1 ;
}
else
{
k = j / 2 ;
}
if ( heap.get(j) < heap.get(k) )
{
int temp = heap.get(j) ;
heap.set(j,heap.get(k)) ;
heap.set(k,temp) ;
}
else
{
break ;
}
}
}
}
public int remove()
{
int n = heap.get(0) ;
heap.set(0,heap.get(heap.size()-1)) ;
heap.set(heap.size()-1,n) ;
for( int i = 0 ; i < heap.size() ; )
{
int k = i * 2 + 1 ;
if ( (heap.get(i) < heap.get(k) && heap.get(i) < heap.get(k+1)) || heap.size() - 1 <= k )
{
break ;
}
else if ( heap.get(k) < heap.get(k+1) || heap.size() - 1 <= k + 1 )
{
int temp = heap.get(i) ;
heap.set(i,heap.get(k)) ;
heap.set(k,temp) ;
i = i * 2 + 1 ;
}
else
{
int temp = heap.get(i) ;
heap.set(i,heap.get(k+1)) ;
heap.set(k+1,temp) ;
i = i * 2 + 2 ;
}
}
heap.remove(heap.size()-1) ;
return n ;
}
public void change(int n , int v)
{
heap.set(n,v) ;
int k ;
if ( n % 2 == 0 )
{
k = n / 2 - 1 ;
}
else
{
k = n / 2 ;
}
if ( heap.get(n) < heap.get(k) )
{
for( int j = n ; j > 0 ; j /= 2 )
{
if ( j % 2 == 0 )
{
k = j / 2 - 1 ;
}
else
{
k = j / 2 ;
}
if ( heap.get(j) < heap.get(k) )
{
int temp = heap.get(j) ;
heap.set(j,heap.get(k)) ;
heap.set(k,temp) ;
}
else
{
break ;
}
}
}
else
{
for( int i = n ; i < heap.size() ; )
{
k = i * 2 + 1 ;
if ( heap.size() <= k )
{
break ;
}
else if (heap.get(i) < heap.get(k) && heap.get(i) < heap.get(k+1))
{
break ;
}
else if ( heap.size() <= k + 1 )
{
int temp = heap.get(i) ;
heap.set(i,heap.get(k)) ;
heap.set(k,temp) ;
i = i * 2 + 1 ;
}
else if ( heap.get(k) < heap.get(k+1) )
{
int temp = heap.get(i) ;
heap.set(i,heap.get(k)) ;
heap.set(k,temp) ;
i = i * 2 + 1 ;
}
else
{
int temp = heap.get(i) ;
heap.set(i,heap.get(k+1)) ;
heap.set(k+1,temp) ;
i = i * 2 + 2 ;
}
}
}
}
public boolean is_empty()
{
if ( heap.size() == 0 )
return true ;
else
return false ;
}
public void show()
{
if ( heap.size() == 0 )
{
System.out.println("Empty!") ;
}
else
{
for ( int i = 0 ; i < heap.size() ; i ++ )
System.out.print(heap.get(i)+" ");
System.out.println();
}
}
public void clear()
{
heap.clear();
}
PriorityQueue(){
}
}